﻿using System;
using System.Collections.Generic;

namespace T.FAS.Runtime.Metadata.Entity
{
    /// <summary>
    /// 元数据基本接口类
    /// </summary>
    public interface IMetaData : System.ICloneable
    {
        ///// <summary>
        ///// 元数据GUID
        ///// </summary>
        //string GUID { get; set; }

        /// <summary>
        /// ID，Guid 唯一标识 主键
        /// </summary>
        string ID { get; set; }

        /// <summary>
        /// 编号 元数据标识, 例如 DQ_Appcluster
        /// </summary>
        string Code { get; set; }

        /// <summary>
        /// Name，元数据名称, 例如 应用集群DQ查询
        /// </summary>
        string Name { get; set; }

        /// <summary>
        /// 元数据内容
        /// </summary>
        IMetaDataContent Content { get; set; }

        RefSchema RefSchema { get; set; }
        IRefSchemaEntity CurrSchemaEnitty { get; set; }
        List<Term> TermList { get; set; }

        /// <summary>
        ///元数据类型
        /// </summary>
        string MetaTypeID { get; set; }

        /// <summary>
        /// 元数据类型名称
        /// </summary>
        string MetaTypeName { get; set; }

        /// <summary>
        /// 隶属的命名空间
        /// </summary>
        string MetaSpaceID { get; set; }

        /// <summary>
        /// 版本
        /// </summary>
        string CurrentVersionID { get; set; }

        /// <summary>
        /// 当前版本
        /// </summary>
        string CurrentVersion { get; set; }

        /// <summary>
        /// 签入签出状态
        /// </summary>  
        MetaDataStatus MetaDataStatus { get; set; }

        /// <summary>
        /// 签出用户
        /// </summary>
        string CheckOutUser { get; set; }

        /// <summary>
        /// 深度
        /// </summary>
        int Depth { get; set; }

        /// <summary>
        /// 是否删除
        /// </summary>
        bool IsDeleted { get; set; }

        /// <summary>
        /// 元数据对象内容ID
        /// </summary>
        string ContentID { get; set; }

        /// <summary>
        /// 负责人
        /// </summary>
        string Owner { get; set; }

        /// <summary>
        /// 是否支持多语言
        /// </summary>
        bool IsMultiLanguageSupport { get; set; }

        /// <summary>
        /// 当前语言设置
        /// </summary>
        string Culture { get; set; }

        /// <summary>
        /// DataID
        /// </summary>        
        string DataID { get; set; }

        /// <summary>
        /// 元数据对应的对象（HSF、SG、MAC、Web、Event、Config、DO、DM、DQ等）的JSON串，兼容DDP中元数据结构
        /// </summary>        
        string ContentJSON { get; set; }

        /// <summary>
        /// 元数据内容
        /// </summary> 
        /// <remarks>
        /// 元数据所有内容，基本信息、管理信息、版本信息、具体内容
        /// </remarks>
        string MetaDataJson { get; set; }

        /// <summary>
        /// 扩展属性1
        /// </summary>
        string Ext1 { get; set; }

        /// <summary>
        /// 扩展属性2
        /// </summary>
        string Ext2 { get; set; }

        /// <summary>
        /// 扩展属性3
        /// </summary>
        string Ext3 { get; set; }       

        /// <summary>
        /// 扩展属性集合
        /// </summary>
        //List<MetaDataExtProperty> Ext { get; set; }

        /// <summary>
        /// 元数据管理信息
        /// </summary>
        List<MetaDataManageInfo> MetaDataManageInfos { get; set; }

        string TenantId { get; set; }

        /// <summary>
        /// 对应开发层次编号
        /// </summary>
        string DevLevelCode { get; set; }

        /// <summary>
        /// 依赖的元数据列表
        /// </summary>
        TMetaDataCollection DependentMetaDatas { get; }
        List<MetaDataDependencyVersion> MetaDataDependencies { get; set; }

        /// <summary>
        /// 元数据来源类型
        /// </summary>
        MetaDataSourceType SourceType { get; set; }      

        /// <summary>
        /// 创建人
        /// </summary>
        string Creator { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        DateTime CreateTime { get; set; }

        /// <summary>
        /// 最后修改人
        /// </summary>
        string LastModifier { get; set; }

        /// <summary>
        /// 最后修改时间
        /// </summary>
        DateTime LastModifyTime { get; set; }   

        /// <summary>
        /// 项目分支标识
        /// </summary>
        string ProjectBranchID { get; set; }

        MetaDataCheckOut CheckOutMetaData { get; set; }
    }
}
